#coding:utf-8
'''
create on 2017-07-13

@author: sandy
'''
import sys,platform
sys.path.append("../")
from twisted.internet import reactor
from pycommon import Daemon
from pycommon import Const
from pycommon import LogManager
from pycommon import RedisDb
from pycommon import Pack
from pycommon import Utils
from pycommon import RemoteManager
import logging
import Center
import BillWebSite
import ServerConfig

if 'twisted.internet.reactor' not in sys.modules: 
    if platform.system() == "Linux":
        from twisted.internet import epollreactor
        epollreactor.install()  
    else:
        from twisted.internet import iocpreactor
        iocpreactor.install()


def ServerStart(isdaemon):
    logging.info("############Start BillServer############")
    Center.instance.start(ServerConfig.instance.center_ip,ServerConfig.instance.center_port)
    BillWebSite.instance.start(ServerConfig.instance.web_ip,ServerConfig.instance.web_port)
    
def ServerStop():
    BillWebSite.instance.stop()
    Center.instance.stop();
    

def getConfig(isdaemon):
    configlist = RemoteManager.instance.getConfigList()
    RemoteManager.instance.requestConfig(configlist,ServerStart,isdaemon)
    pass

def getServerConfig(isdaemon):
    configlist = [u'server%d.*' % RemoteManager.instance.sid]
    RemoteManager.instance.addConfigCallback(ServerConfig.instance)
    RemoteManager.instance.requestConfig(configlist,getConfig,isdaemon)

def daemonFunc(isdaemon):
    LogManager.instance.setupLog(RemoteManager.instance.loglevel,RemoteManager.instance.logfile,isdaemon)
    logging.info("############Update BillServer Config############")
    RemoteManager.instance.start(getServerConfig,isdaemon)
    reactor.run()
    ServerStop()

def run():
    sid, msip, msport, pidpath, logfile, loglevel, pathSelfConfig = Utils.loadDaemonConfig(ServerConfig.instance.rundir)
    RemoteManager.instance.init(sid,msip,msport,logfile, loglevel)
    Daemon.run(pidpath, daemonFunc)

if __name__ == "__main__":
    run()